上一回,我提到 CC: Tweaked 的 Computer 方塊有許多基礎指令
但我不打算逐一介紹各個指令用法
請大家自行用 help 查詢唷!
今天開始,我們來抽絲剝繭,看看這個「Computer」到底是怎麼寫出來的?
首先,就從自訂電腦開機訊息開始!
但是在自訂開機訊息之前,必須先了解開機訊息怎麼產生的
用 ls / dir 指令簡單瀏覽一下,可以看到根目錄有個 rom 資料夾
應該可以理解為電腦的核心程式碼
rom 底下有一些資料夾和兩個檔案 motd.txt 和 startup.lua
startup.lua 可容易理解為開機後自動執行的程式碼
那麼 motd.txt 呢?
MOTD 據說是 Message of the day 的縮寫
試著查看 motd.txt 內容
cd rom/
edit motd.txt
發現第 14 行有一段文字就是上一篇文章的電腦開機訊息
Use "monitor" to run a program on a attached monitor.
如果你用 reboot
指令,或是快速鍵 ctrl + t
按壓約 2 秒重新開機
會發現每次的開機訊息是隨機的
除此之外,motd.txt 還有一段文字如下
You can disable these messages by running "set motd.enable false".
所以我已經很確定幾件事:
另外,執行 motd 後,也會隨機顯示開機訊息
有了這些資訊後,再試著回到 startup.lua 尋找 motd 關鍵字,發現以下這段
-- Show MOTD
if settings.get("motd.enable") then
shell.run("motd")
end
也就是說,開機後執行 startup.lua 並判斷 motd.enable 環境變數,如果 motd.enable 是 true,就在當前的 shell window 執行 motd 指令,隨機顯示一條開機訊息。
自訂開機訊息只是我一開始的假設與期望,那麼實際上可以做到嗎?
我們來看看 rom/programs/motd.lua 內容
local date = os.date("*t")
if date.month == 1 and date.day == 1 then
print("Happy new year!")
elseif date.month == 12 and date.day == 24 then
print("Merry X-mas!")
elseif date.month == 10 and date.day == 31 then
print("OOoooOOOoooo! Spooky!")
else
local tMotd = {}
for sPath in string.gmatch(settings.get("motd.path"), "[^:]+") do
if fs.exists(sPath) then
for sLine in io.lines(sPath) do
table.insert(tMotd, sLine)
end
end
end
if #tMotd == 0 then
print("missingno")
else
print(tMotd[math.random(1, #tMotd)])
end
end
大家看到這段程式碼,有會心一笑嗎 :)
作者在這裡埋了些趣味,例如在聖誕夜開機,電腦就會跟你說 Merry X-mas!
接著下半段的程式碼,沒有完全看懂沒關係
但應該可以大概猜出來,它會去讀取 motd.path 變數,來取得開機訊息檔的路徑
可想而知,motd.path 的預設值是 /rom/motd.txt
那我們直接改看看吧!
(set 是 CC: Tweaked 用 Lua 設計的指令,請用 help set 查詢說明)
set motd.path "/mymotd.txt"
edit mymotd.txt
在 mymotd.txt 寫下
Hello Egg ! Welcome to 2021 ironman competition. Come on and good luck !
重新開機後就可以看到這個畫面啦!
今天的分享到這裡,但有人覺得在 CC: Tweaked Computer 裡面寫 Code 很笨拙嗎?
沒有快速鍵或指令可以方便搜尋檔案內的文字
也沒辦法像 vim 那樣,快速瀏覽檔案、刪除整行、選擇範圍、搜尋取代 ...
幾乎什麼工具指令都沒有(或只是我不知道?如果你們知道,請跟我說,謝謝~)
這樣寫 Code 太沒效率了 ><
下一回,我們來尋找更適當的開發工具,請期待~